package com.shuang.tree21;

import java.util.ArrayDeque;
import java.util.LinkedList;
import java.util.Queue;

public class IsSymmetric {

    public boolean isSymmetric(TreeNode root) {
        //使用队列实现 判断左子树和右子树是否是翻转相等的

        if (root == null) {
            return true;
        }

        //定义队列
        Queue<TreeNode> que = new LinkedList<>();

        //将左右子树的节点存进去
        que.offer(root.left);
        que.offer(root.right);

        while (!que.isEmpty()) {

            //弹出一个是左节点
            TreeNode leftNode = que.poll();
            //在弹出来是右节点
            TreeNode rightNode = que.poll();

            //分情况判断
            if (leftNode == null && rightNode == null) {
                continue;
            }

            // if (leftNode != null && rightNode == null) {
            //     //不对称false
            //     return false;
            // }

            // if (leftNode == null && rightNode != null) {
            //     return false;
            // }

            // if (leftNode.val != rightNode.val) {
            //     return false;
            // }

            // 以上三个判断条件合并
            if (leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
                return false;
            }

            que.offer(leftNode.left);
            que.offer(rightNode.right);
            que.offer(leftNode.right);
            que.offer(rightNode.left);

        }

        return true;


    }
}
